package my.springboot3.controller;

import jakarta.validation.constraints.NotBlank;
import my.springboot3.dto.Respond;
import my.springboot3.dto.entity.User;
import my.springboot3.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Map;


@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    /**
     * 登录,成功返回token,失败返回错误信息
     */
    // @PostMapping("/login")
    // public Respond<?> login(@RequestBody User user) {
    //     return userService.login(user);
    // }
    @PostMapping("/login")
    public Respond<?> login(@RequestParam @NotBlank String username, @RequestParam @NotBlank String password) {
        return userService.login(username, password);
    }

    /**
     * 注册,成功无额外返回,失败返回错误信息
     */
    @PostMapping("/register")
    public Respond<Void> register(@RequestBody @Validated User user) {
        // 尝试注册用户
        return userService.register(user);
    }

    /**
     * 获取当前登录用户的详细信息
     * <p>
     * @请求路径：/user/userInfo
     * @请求方式：GET
     * @请求参数：token
     */
    @GetMapping("/userInfo")
    public Respond<?> userInfo() {
        // 获取当前登录用户信息
        return  userService.userInfo();
    }

    /**
     * 修改已登录用户信息,除头像和密码
     * <p>
     * @请求路径：/user/update
     * @请求方式：Put
     * @请求参数：token,nickname,email,userPic(请求头,请求体)
     */
    @PutMapping("/update")
    public Respond<Void> update(@RequestBody @Validated User user){
        // 修改用户信息
        return userService.update(user);
     }

     /**
      * 修改已登录用户密码
      * <p>
      * @请求路径 /user/updatePwd
      * @请求方式 PATCH
      * @请求参数 oldPwd,newPwd,rePwd
      */
    @PatchMapping("/updatePwd")
    public Respond<Void> updatePwd(@RequestBody Map<String, String> pwdMap) {
         // 获取参数
         String oldPwd = pwdMap.get("oldPwd");
         String newPwd = pwdMap.get("newPwd");
         String rePwd = pwdMap.get("rePwd");
        // 修改用户密码
        userService.updatePwd(oldPwd, newPwd, rePwd);
         return Respond.success();
     }

    /**
     * 修改已登录用户头像
     */
    @PutMapping("/updatePic")
    public Respond<Void> updatePic(@RequestParam String avatarUrl) {
        // 修改用户头像
        userService.updatePic(avatarUrl);
        return Respond.success();
    }

    // updateAvatar
    @PatchMapping("/updateAvatar")
    public Respond<Void> updateAvatar(@RequestParam String avatarUrl) {
        // 修改用户头像
        userService.updatePic(avatarUrl);
        return Respond.success();
    }
}


